/**
 * @author liangxi
 * @since 2023/12/21
 * @details 抽象工厂用来生产某个系列的相关的类型对象：比如，基于SQLSERVER数据库的连接与查询(查询语法可能不一样)和
 * 基于MYSQL的数据库连接与查询。连接与查询不能混用，这就要求所使用的工厂，生产的连接与查询应该匹配。
 */

#ifndef DESIGNPATTERN_PIZZAINGREDIENTFACTORY_H
#define DESIGNPATTERN_PIZZAINGREDIENTFACTORY_H

#include <memory>
#include <vector>

namespace AbstractFactory {

    class PizzaIngredientFactory {
    public:
        virtual Dough createDough() = 0;

        virtual Sauce createSauce() = 0;

        virtual Cheese createCheese() = 0;

        virtual std::shared_ptr<std::vector<Veggies>> createVeggies() = 0;

        virtual Pepperoni createPepperoni() = 0;

        virtual Clams createClams() = 0;

        virtual ~PizzaIngredientFactory() = default;
    };

} // AbstractFactory

#endif //DESIGNPATTERN_PIZZAINGREDIENTFACTORY_H
